import 'dart:math';
import 'dart:ui';

/// 字符串处理工具类
/// 支持多种常见处理方式
class utilStr {
  /// 判断字符串是否为 null 或空字符串
  static bool isNullOrEmpty(String? str) {
    return str == null || str.isEmpty;
  }

  /// 判断字符串是否为 null、空字符串或全是空白字符
  static bool isBlank(String? str) {
    return str == null || str.trim().isEmpty;
  }

  /// 去除字符串前后空格
  static String trim(String str) {
    return str.trim();
  }

  /// 将字符串首字母大写
  static String capitalize(String str) {
    if (str.isEmpty) return str;
    return str[0].toUpperCase() + str.substring(1);
  }

  /// 将字符串转换为小写
  static String toLowerCase(String str) {
    return str.toLowerCase();
  }

  /// 将字符串转换为大写
  static String toUpperCase(String str) {
    return str.toUpperCase();
  }

  /// 检查字符串是否包含子字符串（可选是否忽略大小写）
  static bool contains(String source, String sub, {bool ignoreCase = false}) {
    if (ignoreCase) {
      return source.toLowerCase().contains(sub.toLowerCase());
    }
    return source.contains(sub);
  }

  /// 将字符串按指定分隔符分割为字符串数组
  static List<String> split(String str, String delimiter) {
    return str.split(delimiter);
  }

  /// 替换字符串中的指定内容
  static String replace(String str, String from, String to) {
    return str.replaceAll(from, to);
  }

  /// 判断字符串是否为数字
  static bool isNumeric(String str) {
    return double.tryParse(str) != null;
  }

  /// 判断字符串是否为整数
  static bool isInt(String str) {
    return int.tryParse(str) != null;
  }

  /// 获取字符串长度（可选是否去除空白字符）
  static int length(String str, {bool trim = false}) {
    return trim ? str.trim().length : str.length;
  }

  /// 格式化字符串：将 {{key}} 替换为指定 value
  static String format(String template, Map<String, String> values) {
    String result = template;
    values.forEach((key, value) {
      result = result.replaceAll('{{$key}}', value);
    });
    return result;
  }

  /// 反转字符串
  static String reverse(String str) {
    return str.split('').reversed.join();
  }

  /// 判断两个字符串是否相等（可忽略大小写）
  static bool equals(String a, String b, {bool ignoreCase = false}) {
    return ignoreCase ? a.toLowerCase() == b.toLowerCase() : a == b;
  }

  /// 判断字符串是否是合法的邮箱格式
  static bool isEmail(String str) {
    final emailReg = RegExp(r'^[\w\.-]+@[\w\.-]+\.\w+\$');
    return emailReg.hasMatch(str);
  }

  /// 判断字符串是否是合法的手机号码（中国大陆）
  static bool isPhone(String str) {
    final phoneReg = RegExp(r'^1[3-9]\d{9}\$');
    return phoneReg.hasMatch(str);
  }

  /// 判断字符串是否为 URL
  static bool isURL(String str) {
    final urlReg = RegExp(r'^(http|https):\\/\\/');
    return urlReg.hasMatch(str);
  }

  /// 判断字符串是否全是字母
  static bool isAlpha(String str) {
    final alphaReg = RegExp(r'^[a-zA-Z]+\$');
    return alphaReg.hasMatch(str);
  }

  /// 判断字符串是否全是字母或数字
  static bool isAlphaNumeric(String str) {
    final alphaNumReg = RegExp(r'^[a-zA-Z0-9]+\$');
    return alphaNumReg.hasMatch(str);
  }

  /// 移除所有空格
  static String removeAllSpaces(String str) {
    return str.replaceAll(' ', '');
  }

  /// 将字符串重复 n 次
  static String repeat(String str, int times) {
    return List.filled(times, str).join();
  }
  //随机
  static String generateRandomString(int length) {
    const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';  // 字母和数字的字符集
    Random random = Random();

    return List.generate(length, (index) => chars[random.nextInt(chars.length)]).join('');
  }
}
